package com.misty.encryption_decryption.AES;


import com.misty.encryption_decryption.base64.Base64Encoder;
import org.junit.Test;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;

/**
 * 高级加密标准（英语：Advanced Encryption Standard，缩写：AES），在密码学中又称Rijndael加密法，是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES，已经被多方分析且广为全世界所使用。
 */
public class AESUtil {

    private static String src = "iMisty";

    @Test
    public void jdkAES() {
        try {
            //1. 生成Key
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            //初始化长度
            keyGenerator.init(128);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] keyByte = secretKey.getEncoded();

            //2.Key转换
            Key key = new SecretKeySpec(keyByte, "AES");//keyByte ，加密方式

            // 3. 加密 : 加密方式/工作模式/填充方式
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println("jdk AES encrypt : " + Base64Encoder.encode(result));

            //4. 解密
            cipher.init(Cipher.DECRYPT_MODE, key);
            result = cipher.doFinal(result);
            System.out.println("jdk AES desrypt : " + new String(result));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
